package com.yc.jpyy.base.util;



import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期格式工具类
 * 
 * @author liangzz 2012-9-10
 * 
 */
public class DateUtil {

	/**
	 * 得到日期字符
	 * 
	 * @return 日期格式：yyyyMMdd
	 */
	public static String getDateStr() {
		SimpleDateFormat dateFm = new SimpleDateFormat("yyyyMMdd"); // 格式化当前系统日期
		String dateTime = dateFm.format(new java.util.Date());
		return dateTime;
	}

	/**
	 * 得到日期
	 * 
	 * @return 日期格式：yyyy-MM-dd
	 */
	public static String getDateDay() {
		SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd"); // 格式化当前系统日期
		String dateTime = dateFm.format(new java.util.Date());
		return dateTime;
	}

	/**
	 * 得到日期时间
	 * 
	 * @return 日期格式：yyyy-MM-dd hh:mm:ss
	 */
	public static String getDateTime() {
		SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式化当前系统日??
		String dateTime = dateFm.format(new java.util.Date());
		return dateTime;
	}

	/**
	 * 得到日期时间
	 * 
	 * @return 日期格式：yyyyMMddhhmmss
	 */
	public static String getDateTimem() {
		SimpleDateFormat dateFm = new SimpleDateFormat("yyyyMMddhhmmss"); // 格式化当前系统日??
		String dateTime = dateFm.format(new java.util.Date());
		return dateTime;
	}

	private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
	public static final String FORMATACT = "yyyy-MM-dd HH:mm";

	public static Date str2Date(String str) {
		return str2Date(str, null);
	}

	public static Date str2Date(String str, String format) {
		if (str == null || str.length() == 0) {
			return null;
		}
		if (format == null || format.length() == 0) {
			format = FORMAT;
		}
		Date date = null;
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			date = sdf.parse(str);

		} catch (Exception e) {
			e.printStackTrace();
		}
		return date;

	}

	public static Calendar str2Calendar(String str) {
		return str2Calendar(str, null);

	}

	public static Calendar str2Calendar(String str, String format) {

		Date date = str2Date(str, format);
		if (date == null) {
			return null;
		}
		Calendar c = Calendar.getInstance();
		c.setTime(date);

		return c;

	}

	public static String date2Str(Calendar c) {// yyyy-MM-dd HH:mm:ss
		return date2Str(c, null);
	}

	public static String date2Str(Calendar c, String format) {
		if (c == null) {
			return null;
		}
		return date2Str(c.getTime(), format);
	}

	public static String date2Str(Date d) {// yyyy-MM-dd HH:mm:ss
		return date2Str(d, null);
	}

	public static String date2Str(Date d, String format) {// yyyy-MM-dd HH:mm:ss
		if (d == null) {
			return null;
		}
		if (format == null || format.length() == 0) {
			format = FORMAT;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		String s = sdf.format(d);
		return s;
	}

	public static String getCurDateStr() {
		Calendar c = Calendar.getInstance();
		c.setTime(new Date());
		return c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-"
				+ c.get(Calendar.DAY_OF_MONTH) + "-"
				+ c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE)
				+ ":" + c.get(Calendar.SECOND);
	}

	/**
	 * 获得当前日期的字符串格式
	 * 
	 * @param format
	 * @return
	 */
	public static String getCurDateStr(String format) {
		Calendar c = Calendar.getInstance();
		return date2Str(c, format);
	}

	// 格式到秒
	public static String getMillon(long time) {

		return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(time);

	}

	// 格式到天
	public static String getDay(long time) {

		return new SimpleDateFormat("yyyy-MM-dd").format(time);

	}

	// 格式到毫秒
	public static String getSMillon(long time) {

		return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS").format(time);

	}

	/**
	 * 得到日期时间
	 * 
	 * @return 日期格式：yyyyMMddhhmmss
	 */
	public static String getDateTimem(long millis) {
		SimpleDateFormat dateFm = new SimpleDateFormat("yyyyMMddHHmmss"); // 格式化当前系统日
		String dateTime = dateFm.format(new Date(millis));
		return dateTime;
	}

	/**
	 * 
	 * @功能 TODO
	 * @param mDate1 ApplyStartTime
	 * @param mDate2 ApplyEndTime
	 * @param mDate3 ActStartTime
	 * @param mDate4 ActiEndTime
	 * @return : 
	 *                -1:未知
	 *                0:未开始
	 *                1:开始报名
	 *                2:报名结束
	 *                3:活动开始
	 *                4:活动结束
	 * @作者 2014-8-28 / 王文凯
	 */
	public static int getActState(String mDate1, String mDate2, String mDate3,
			String mDate4) {
		Date Date01 = DateUtil.str2Date(mDate1, DateUtil.FORMATACT);
		Date Date02 = DateUtil.str2Date(mDate2, DateUtil.FORMATACT);
		Date Date03 = DateUtil.str2Date(mDate3, DateUtil.FORMATACT);
		Date Date04 = DateUtil.str2Date(mDate4, DateUtil.FORMATACT);
		Date NowDate = new Date();
		if (NowDate.before(Date01)) {
			return 0;
		} else if (NowDate.after(Date01) && NowDate.before(Date02)) {
			return 1;
		} else if (NowDate.after(Date02) && NowDate.before(Date03)) {
			return 2;
		} else if (NowDate.after(Date03) && NowDate.before(Date04)) {
			return 3;
		} else if (NowDate.after(Date04)) {
			return 4;
		}
		return -1;
	}

}
